package com.jrx.anytxn.param.service.account;

import com.jrx.anytxn.i18n.response.TxnPage;
import com.jrx.anytxn.common.exception.TxnException;
import com.jrx.anytxn.param.dto.account.SubjectAccountConfigReq;
import com.jrx.anytxn.param.dto.account.SubjectAccountConfigRes;
import com.jrx.anytxn.param.entity.GaSubjectAccountConfig;

/**
 * 科目内部户配置service
 *
 * @author yf
 * date 2019/12/24 0024
 * @version V1.0
 **/
public interface ISubjectAccountConfigService {

    /**
     * 分页查询科目内部户配置表
     *
     * @param pageNum  页码
     * @param pageSize 页大小
     * @param tenantId 租户ID
     * @return com.jrx.anytxn.common.data.TxnPage<com.jrx.anytxn.param.dto.account.SubjectAccountConfigRes>
     * @author fan.yang
     * date: 2019/12/24 0024 下午 22:08
     */
    TxnPage<SubjectAccountConfigRes> getAllPageByTenId(Integer pageNum, Integer pageSize, String tenantId) throws TxnException;

    /**
     * 根据租户ID，科目ID，产品ID查询科目内部户配置表信息
     *
     * @param subjectId 科目ID
     * @param tenantId  租户ID
     * @param productId 产品ID
     * @return com.jrx.anytxn.param.dto.account.SubjectAccountConfigRes
     * @author fan.yang
     * date: 2019/12/24 0024 下午 22:09
     */
    SubjectAccountConfigRes getByTenIdIdAndSubjectId(String subjectId, String tenantId, String productId) throws TxnException;


    public GaSubjectAccountConfig findBySubjectIdAndProductId(String tenantId, String subjectId, String productId);

    /**
     * 增加科目内部户配置表信息
     *
     * @param subjectAccountConfigReq 科目内部户配置表请求
     * @return com.jrx.anytxn.param.dto.account.SubjectAccountConfigRes
     * @author fan.yang
     * date: 2019/12/24 0024 下午 22:09
     */
    SubjectAccountConfigRes addSubjectAccountConfig(SubjectAccountConfigReq subjectAccountConfigReq) throws TxnException;

    /**
     * 修改科目内部户配置表信息
     *
     * @param subjectAccountConfigReq 科目内部户配置表请求
     * @return com.jrx.anytxn.param.dto.account.SubjectAccountConfigRes
     * @author fan.yang
     * date: 2019/12/24 0024 下午 22:09
     */
    SubjectAccountConfigRes modifySubjectAccountConfig(SubjectAccountConfigReq subjectAccountConfigReq);

    /**
     * 根据租户ID，产品ID，科目ID删除科目内部户配置表信息
     *
     * @param tenantId  租户ID
     * @param subjectId 科目ID
     * @param productId 产品ID
     * @return java.lang.Boolean
     * @author fan.yang
     * date: 2019/12/24 0024 下午 22:09
     */
    Boolean removeBySubIdAndProIdAndTenId(String tenantId, String subjectId, String productId) throws TxnException;
}
